//
//  XBCompSetExample.c
//  数据结构算法和笔试题
//
//  Created by 王国栋 on 16/6/23.
//  Copyright © 2016年 xiaobai. All rights reserved.
//

#include "XBCompSetExample.h"

// --  并查集 用一个数组表示。相当于一个森林，森林里面每个树都是孤立的。通过条件将节点组合成几个树

static int n =100;
static int f[100];

//初始化
void init()
{
    for (int i =0; i<n; i++) {
        
        f[i]=i;//每个节点都只表示自己独立的
    }
}
int getF(int x)
{
    if (f[x]==x) {
        
        return x;//自己仅仅代表自己的时候就返回
    }
    else
    {
        
        f[x]=getF(f[x]);//这里是压缩路径，每次函数返回的时候把中途的编号改成最后找到的顶级编号
        return f[x];
    }
}
void merger(int v1,int v2)
{
    v1 = getF(f[v1]);
    v2 = getF(f[v2]);
    if (v1!=v2) {
        
        f[v2]=v1;
    }
    
}
void testMerge()
{
    int x,y,sum=0;
    int n,m;
    scanf("%d %d",&n,&m);//n表示强盗人数，m表示规则的描述，强盗的团伙关系
    for (int i=0; i<=m; i++) {
        
        scanf("%d %d",&x,&y);
        merger(x, y);
    }
    for (int i=0; i<m; i++) {
        
        if (i==f[i]) {
            sum++;
        }
    }
    printf("团伙的个数是:%d",sum);
}













